package com.example.program

import org.junit.Test


/**
 * 一个数组求和，数组中的两个元素的和为指定的值，
 * 输出数组两个元素的索引数组
 * 例如：
 * 【1, 2, 4, 5】, 6
 * 输出索引位置数组【1，2】
 * 要求：
 * 输入的数在-196 < N < 196
 * 求和的值在-196 < N < 196
 * 数组元素的最大个数，1 < N < 1000
 *
 * @author zhouronghua
 * @time 2022/3/9 9:12 上午
 */
class SumArrayTest {

    /**
     * 出错时返回空数组
     */
    val EMPTY_ARRAY = IntArray(0)

    /**
     * 最小取值
     */
    val minValue = -196

    /**
     * 最大取值
     */
    val maxValue = 196

    /**
     * 查找数组中两个数的和等于目标值的索引位置
     *
     * @author zhouronghua
     * @time 2022/3/9 9:41 上午
     */
    fun searchSumInt(numbers: IntArray, target: Int): IntArray {
        // 参数检测
        if (numbers.size < 2 || numbers.size > 1000
            || target < minValue || target > maxValue
        ) {
            return EMPTY_ARRAY
        }
        // 数组中元素检查
        for (num in numbers) {
            // 判断数组元素取值
            if (num < minValue || num > maxValue) {
                return EMPTY_ARRAY
            }
        }
        // 数组元素个数
        val count = numbers.size
        for (i in 0 until count) {
            for (j in i + 1 until count) {
                // 计算求和是否相等
                if (numbers[i] + numbers[j] == target) {
                    // 找到对应的数字
                    return intArrayOf(i, j)
                }
            }
        }
        return EMPTY_ARRAY
    }

    @Test
    fun testSearchSum() {
        val numbers = intArrayOf(-1, 2, 4, 6)
        val target = 6
        var result = searchSumInt(numbers, target)
        for (num in result) {
            print(num)
            print(" ")
        }
        println()
    }


}